$(function() {
    var isApp = true;//是否为App端使用
    
	var targetList = [];
    var resultCount = 0;
    var mapMarkerList = [];	//地图上的点集合
    
    var userid = sessionStorage.getItem('userId');		 //用户编号
    var geolocation;	//高德定位控件
    var taskRoadDriving;
    
    $(".loadingMasker").show();//显示loading
    
    //针对全局调用的刷新方法
    KDDH.refreshList = function(){
    	getNoTaskList();	//未完成任务
    }
    
    initAMapPlugin();	//初始化高德导航控件
    var intervalRegist = setInterval(function(){
        if(isApp){
            if(KDDH.isHaveRegisterHandler){
                getNoTaskList();    //未完成任务
                clearInterval(intervalRegist);
            }
        }else{
            getNoTaskList();    //未完成任务
            clearInterval(intervalRegist);
        }
		
	}, 100);
//  getNoTaskList();	//未完成任务
    getYesTaskList();	//已完成任务
    listenClick();		//监听各个按钮的点击
	suggestBtClick();	//建议点位
    navBtnClick();		//信息面板中导航按钮点击
    roadBtnClick();		//信息面板中查看按钮点击
    
	
	//监听各个按钮的点击
	function listenClick(){
		//按距离按钮点击
		$(".distanceBt").on("click", function() {
    		setNoTaskPage("distance");	//按距离最短
		});
		//刷新按钮点击
		$(".refreshBt").on("click", function() {
			getNoTaskList();	//获取未完成列表 	
		});
		//按距离按钮点击
		$(".timeBt").on("click", function() {
			setNoTaskPage("time");		//按时间最少
		});
		//全部删除按钮点击
		$(".deleteAllBT").on("click", function() {
			deleteAllYesTask();			//删除全部已完成任务
		});
	}
    
	//获取未完成任务列表
	function getNoTaskList(){
		$(".loadingMasker").show();//显示loading
		
		//清楚列表
		$(".swiper-slide.all ul").empty();
		//清除地图上的地址点
		if(mapMarkerList.length){
			KDDH.map.remove(mapMarkerList);
    		mapMarkerList = [];
		}
		//清除地图上的轨迹
		taskRoadDriving.clear();
		
		KDDH.isRefreshLocation = false;
		if(isApp){
		    getInfoFromWebView("getLoc");//调用手机定位接口
		}else{
		    doGetLocation();//调用浏览器（高德）定位接口
		}
		//实时刷新时间单位为毫秒
		var interval = setInterval(function(){
			console.log("no");
			if(KDDH.isRefreshLocation){
				console.log("yes")
				doGetNoTaskList();
				clearInterval(interval);
			}
		}, 1000);
		
	}
	
	function doGetNoTaskList(){
		var jsonObj = {
			"userid":userid
		};
//		getNoTaskList_LocalStorage(jsonObj, function(result){
		var jsonStr = json2str(jsonObj);
		callAjax("getNoTaskList", jsonStr, "获取未完成任务列表:getNoTaskList",function(result){
			navigationPlan(result);
		});
	}
	
	//获取已完成任务列表
	function getYesTaskList(){
		$(".swiper-slide.dcl ul").empty();
		var jsonObj = {
				"userid":userid
		};
//		getYesTaskList_LocalStorage(jsonObj, setYesTaskPage);
		var jsonStr = json2str(jsonObj);
		callAjax("getYesTaskList", jsonStr, "获取已完成任务列表:getYesTaskList", setYesTaskPage);
	}
	
	//更新任务状态
	function updateTaskStatus(taskid, status){
		var jsonObj = {
				"status":status,
				"taskid":taskid
		};
//		updateTaskStatus_LocalStorage(jsonObj, function(result){
		var jsonStr = json2str(jsonObj);
		callAjax("updateTaskStatus", jsonStr, "更新任务状态:updateTaskStatus", function(){
			getNoTaskList();	//获取未完成列表，刷新 	
			getYesTaskList()	//刷新列表
		});
	}
	
	//删除全部已完成任务
	function deleteAllYesTask(){
		
		var result = confirm('你确定要删除所有已完成记录吗？');
		if(result){
			var jsonObj = {
					"userid":userid
			};
//			deleteAllYesTask_LocalStorage(jsonObj, function(result){
			var jsonStr = json2str(jsonObj);
			callAjax("deleteAllYesTask", jsonStr, "删除全部已完成任务:deleteAllYesTask", function(){
				getYesTaskList()	//刷新列表
			});
		}
	}
    
    function navigationPlan(result){
	    if(result.data.length>0){
	        $(".infopanel .infopaneltitle").hide();
	        $(".infopanel .infopanelcont").show();
	    }else{
	        $(".infopanel .infopaneltitle").show();
            $(".infopanel .infopanelcont").hide();
	    }
	    
	    $(".TodoList").text("待处理("+result.data.length+")");		//更新列表标题个数
	    $(".maptodoBT").val("待处理("+result.data.length+")");		//更新地图界面按钮上的个数
	    
	    //我的位置
	    var dingwei = KDDH.locationMarker.getPosition();
	    var startPoint = new AMap.LngLat(dingwei.lng, dingwei.lat);
	    //送货点列表
		targetList = result.data;
		
		// 构造路线导航类
	    var driving = new AMap.Driving({
	        policy: AMap.DrivingPolicy.LEAST_TIME, // 其它policy参数请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_DrivingPolicy
	        ferry: 1, // 是否可以使用轮渡
	        province: '京', // 车牌省份的汉字缩写 
	        //map: KDDH.map,
	        //panel: 'panel'
	    });
		
		resultCount = 0;
		if(targetList.length){
			for(var i=0; i<targetList.length; i++){
				var targetPoint = targetList[i];
				var endPoint = new AMap.LngLat(targetPoint.lng, targetPoint.lat); 
				drivingSearch(driving,startPoint, endPoint, targetPoint, 0);
			}
		}else{
			$(".loadingMasker").hide();//隐藏loading
		}
    }
    
    function timeFormate(value){
    	var result;
    	var min = (value/60).toFixed(0);
    	if(min >=60){
    		result = Math.floor(min/60)+"小时"+(min%60)+"分钟";
    	}else{
    		result = min+"分钟";
    	}
    	return result;
    }
    
    function distanceFormate(value){
    	return (value/1000).toFixed(1)+"公里";
    }
    
    function drivingSearch(driving, startPoint, endPoint, data, errorCount){
    	
    	// 根据起终点经纬度规划驾车导航路线
    	driving.search(startPoint, endPoint, function(status, result){
	    	// result 即是对应的驾车导航信息，相关数据结构文档请参考  https://lbs.amap.com/api/javascript-api/reference/route-search#m_DrivingResult
	        if (status === 'complete') {
	            console.log('获取驾车数据成功')
	            data.distance = result.routes[0].distance;
	            data.time = result.routes[0].time;
	            
	            resultCount++;
		        if(resultCount == targetList.length){
		        	onSearchEnd();
		        }
	        } else {
	        	console.log('获取驾车数据失败：' + result)
	        	errorCount++;
	        	if(errorCount<=5){	//如果查询路线失败，则再查询，共尝试5次
	            	drivingSearch(driving, startPoint, endPoint, data, errorCount);
	        	}else{
//	        		var result = confirm('获取驾车数据失败，是否重新获取？');
//					if(result){
//						drivingSearch(startPoint, endPoint, data);
//					}else{
						resultCount++;
		        		if(resultCount == targetList.length){
				        	onSearchEnd();
				        }
//					}
	        	}
	            
	        }
	        
    	});
    }
    
    function onSearchEnd(){
    	//刷新页面
    	setNoTaskPage("time");		//按时间最少
    	setNoTaskPage("distance");	//按距离最短
    }
    
    function setNoTaskPage(type){
    	var taskList = maopao(targetList, type);
    	setNoTaskOnMap(taskList);	//在地图上标记未完成点	
    	var listPage = [];
    	for(var i=0; i<taskList.length; i++){
    		var taskObj = taskList[i];
    		var itemInfo = '<li data-code="'+taskObj.taskid+'"><div class="top"><h4>'+ taskObj.index +'.' +taskObj.name +'</h4><input type="button" class="naviBt" value="导航" /></div>'
						  +'<div class="content"><span>单号：</span><span>'+ taskObj.couriernumber +'</span></div>'
//						  +'<div class="content"><span>地址：</span><span>'+ taskObj.address +'</span></div>'
						  +'<div class="content"><div class="content1"><span>距离：</span><span>'+ distanceFormate(taskObj.distance) +'</span></div>'
						  +'<div class="content2"><span>耗时：</span><span>'+ timeFormate(taskObj.time) +'</span></div></div></li>';
		    listPage.push(itemInfo);
    	}
    	$(".swiper-slide.all ul").html(listPage);
    	setTimeout(function(){
//  		setNiceScroll(".tabcontainer .all .ulContent");
    		setNiceScroll1(".tabcontainer .all .ulContent",".tabcontainer .all .ulContent ul");
    	},2000)
    	//导航按钮点击
		$(".naviBt").on("click", function() {
			var taskid = $(this).closest("li").attr("data-code"); 
			callGaodeApp(taskid);
//			setTimeout(function(){
//				alert("导航完成");
//				updateTaskStatus(taskid, 1);	//更新为完成
//			}, 5000);
			setTimeout(function(){
				var taskInfo = getTaskInfo(taskid);
				var result = confirm('单号:\n\n'+taskInfo.couriernumber+'\n\n是否已确认完成？');
				if(result){
					updateTaskStatus(taskid, 1);	//更新为完成
				}else{
					getNoTaskList();	//获取未完成列表，刷新 	
				}
			}, 5000);
		});
    }
    
    //在地图上标记未完成点
    function setNoTaskOnMap(taskList){
    	//清除地图上的地址点
		if(mapMarkerList.length){
			KDDH.map.remove(mapMarkerList);
    		mapMarkerList = [];
		}
    	for(var i=0; i<taskList.length; i++){
    		var taskObj = taskList[i];
    		var markerContent = '' +
	        '<div class="custom-content-marker">' +
	        '   <img src="http://a.amap.com/jsapi_demos/static/demo-center/icons/dir-via-marker.png">' +
	        '   <div class="close-btn" >'+taskObj.index+'</div>' +
	        '</div>';
    		
    		var marker = new AMap.Marker({
		        icon: "http://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png",
		        position: [taskObj.lng,taskObj.lat],
		        content: markerContent,
		        offset: new AMap.Pixel(-13, -30),
		        extData:taskObj
		    });
		    marker.setMap(KDDH.map);
		    mapMarkerList.push(marker);
		    marker.on('click', function(e){
		    	showInfoPanel(e.target.getExtData());
		    });
    	}
//  	KDDH.map.setFitView();	//把地图缩放到数据范围
    	
    	$(".loadingMasker").hide();//隐藏loading
    	//显示信息面板
    	showInfoPanel(taskList[0]);
    }
    
	function setYesTaskPage(result){
		$(".complete").text("已完成("+result.data.length+")");		//更新个数
		var listPage = [];
    	for(var i=0; i<result.data.length; i++){
    		var taskObj = result.data[i];
    		var itemInfo = '<li data-code="'+taskObj.taskid+'"><div class="top"><h4>'+ taskObj.name +'</h4><input type="button" class="withdrawBt" value="撤回" /></div>'
						  +'<div class="content"><span>单号：</span><span>'+ taskObj.couriernumber +'</span></div>'
						  +'<div class="content"><span>地址：</span><span>'+ taskObj.address +'</span></div>'
						  +'<div class="content"><span>时间：</span><span>'+ taskObj.updatetime +'</span></div></li>';
		    listPage.push(itemInfo);
    	}
    	$(".swiper-slide.dcl ul").html(listPage);
    	setTimeout(function(){
//  		setNiceScroll(".tabcontainer .dcl .ulContent");
    		setNiceScroll1(".tabcontainer .dcl .ulContent",".tabcontainer .dcl .ulContent ul");
    	},2000)
    	//撤回按钮点击
		$(".withdrawBt").on("click", function() {
			var taskid = $(this).closest("li").attr("data-code"); 
			updateTaskStatus(taskid, 0);	//更新为未完成
		});
	}
	
	//根据任务id获取任务详细信息
	function getTaskInfo(taskid){
		for(var i=0; i<targetList.length; i++){
			var tObj = targetList[i];
			if(tObj.taskid == taskid){
				return tObj;
			}
		}
		return null;
	}
	
	//调用高德导航app
	function callGaodeApp(taskid){
		var taskObj = getTaskInfo(taskid);
		var dingwei = KDDH.locationMarker.getPosition();
		if(taskObj){
			var url = "https://uri.amap.com/navigation?";
			url += "from="+dingwei.lng+","+dingwei.lat+",当前位置",
			url += "&to="+taskObj.lng+","+taskObj.lat+","+taskObj.name,
			url += "&callnative=1";
			
			//新标签也打开
//			window.open(url);
//			window.open(url, "_blank");
			
			//当前页打开
//			window.location.href = url;
			
			//新建iframe打开
//			var iframe = document.createElement('iframe'); 
//			iframe.src=url;  
//			document.body.appendChild(iframe);
			
			//在固定的iframe打卡
//			$(".naviIfram").attr('src',url);
			
			//通过app打开
			var dataUrl = "slat="+dingwei.lat+"&slon="+dingwei.lng+"&dlat="+taskObj.lat+"&dlon="+taskObj.lng+""
			getInfoFromWebView("getOpenGaoDe",dataUrl);//打开高德
		}
	}
    
    //冒泡排序算法，返回新数组
    function maopao(targetList, attri){
		var arra = targetList.concat();
        var temp;
        for(var i=0;i<arra.length;i++){ 
            for(var j=0;j<arra.length-i-1;j++){
                if(arra[j][attri]>arra[j+1][attri]){
                    temp=arra[j];
                    arra[j]=arra[j+1];
                    arra[j+1]=temp;
                }
            }
        };
        for(var n=0; n<arra.length; n++){
        	var addressObj = arra[n];
        	addressObj.index = n+1;
        }
    	return arra;
    }
    
    //调用后台接口
	function callAjax(funcName, paramObj, log, callback){
		$.ajax({
			type: "post",
			url: KddhBackUrl + "Address/" + funcName,
			data: paramObj,
			contentType:'application/json',
			dataType: 'json',
			success: function(result) {
				console.log(log);
				console.log(result);
				if(callback){
					callback(result);
				}
			}
		});
	}
	

	function initAMapPlugin(){
		AMap.plugin('AMap.Geolocation', function() {
	        geolocation = new AMap.Geolocation({
	            enableHighAccuracy: true,//是否使用高精度定位，默认:true
	            timeout: 10000,          //超过10秒后停止定位，默认：5s
//	            buttonPosition:'RB',    //定位按钮的停靠位置
	            buttonOffset: new AMap.Pixel(-50, 20),//定位按钮与设置的停靠位置的偏移量，默认：Pixel(10, 20)
	            zoomToAccuracy: true,   //定位成功后是否自动调整地图视野到定位点
	        });
//	        KDDH.map.addControl(geolocation);
	  	});
	  	
	  	// 构造路线导航类
	    taskRoadDriving = new AMap.Driving({
	        policy: AMap.DrivingPolicy.LEAST_TIME, // 其它policy参数请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_DrivingPolicy
	        ferry: 1, // 是否可以使用轮渡
	        province: '京', // 车牌省份的汉字缩写 
	        map: KDDH.map,
	        autoFitView:true,	//是否自动缩放到路径的
	        hideMarkers:true
	    });
	}
	
//	function doGetLocation(callback,errorCount){
	function doGetLocation(errorCount){
		
		//测试用
//		var lng = 116.273792;
//		var lat = 39.907754
//		KDDH.currentPosition={
//      	lng:lng,
//      	lat:lat
//      };
//      KDDH.locationMarker.setPosition([lng,lat]);
//      callback();
//      return;
		
		//高德定位
        geolocation.getCurrentPosition(function(status,result){
            if(status=='complete'){
            	var data = result;
                var str = "";
		        str +='定位结果：' + data.position;
		        str+=';定位类别：' + data.location_type;
		        if(data.accuracy){
		             str+=';精度：' + data.accuracy + ' 米';
		        }//如为IP精确定位结果则没有精度信息
		        str+=';是否经过偏移：' + (data.isConverted ? '是' : '否');
//		        alert(str);
		        KDDH.currentPosition={
		        	lng:data.position.lng,
		        	lat:data.position.lat
		        };
	            KDDH.locationMarker.setPosition(data.position);
	            KDDH.isRefreshLocation = true;
//	            callback();
            }else{
                errorCount++;
                if(errorCount <=5){
//              	doGetLocation(callback, errorCount);
                	doGetLocation(errorCount);
                }else{
                	alert("定位失败，请检查定位开关，或尝试重新登录");
                }
            }
        });
	}
	
	//建议点位
	function suggestBtClick(){
		$(".zs_layout .addressListBtn .suggestBt").click(function(e) {
			getNoTaskList();
		});
	}
	
	//显示信息面板
	function showInfoPanel(dataObj){
		$(".infopanel .infopanelcont").attr("data-code",dataObj.taskid);
		$(".infopanel .infopanelcont .top h4").text(dataObj.index+'.'+dataObj.name);
		$(".infopanel .infopanelcont .couriernumber").text(dataObj.couriernumber);
		$(".infopanel .infopanelcont .distance").text(distanceFormate(dataObj.distance));
		$(".infopanel .infopanelcont .time").text(timeFormate(dataObj.time));
		if($(".addressList").css("display")=="none"){
			doShowInfoPanel(dataObj.taskid);
		}
	}
	function doShowInfoPanel(taskid){
		$(".masker").show();
		$(".infopanel").css('transform', 'translateY(0rem)');
		drawTaskRoad(taskid);
	}
	
	//信息面板中导航按钮点击
	function navBtnClick(){
		$(".infopanel .infopanelcont .navBtn").on("click", function() {
			var taskid = $(".infopanel .infopanelcont").attr("data-code"); 
			callGaodeApp(taskid);
			setTimeout(function(){
				var taskInfo = getTaskInfo(taskid);
				var result = confirm('单号:\n\n'+taskInfo.couriernumber+'\n\n是否已确认完成？');
				if(result){
					updateTaskStatus(taskid, 1);	//更新为完成
				}else{
					getNoTaskList();	//获取未完成列表，刷新 	
				}
			}, 5000);
		});
	}
	
	//信息面板中查看按钮点击
	function roadBtnClick(){
		$(".infopanel .infopanelcont .roadBtn").on("click", function() {
			var taskid = $(".infopanel .infopanelcont").attr("data-code"); 
			drawTaskRoad(taskid);
		});
	}
	
	//绘制当前位置到地址间的路线
	function drawTaskRoad(taskid){
		var taskInfo = getTaskInfo(taskid);
		var dingwei = KDDH.locationMarker.getPosition();
    	var startPoint = new AMap.LngLat(dingwei.lng, dingwei.lat);
    	var endPoint = new AMap.LngLat(taskInfo.lng, taskInfo.lat);
		// 根据起终点经纬度规划驾车导航路线
		taskRoadDriving.search(startPoint, endPoint, function(status, result){});
	}
	
	
	
	
	
	
	
})
